<js>浅拷贝
概念
浅拷贝
Object.assign()
1  | const obj1 = {a:1}  | 
扩展运算符
1  | const obj1 = { a: { c: 2 }, b: 1 };  | 
conact拷贝数组
1  | const arr1 = [1,2,{a: 1}]  | 
slice拷贝数组
1  | const arr1 = [1,2,{a: 1}]  | 
代码实现浅拷贝
1  | function clone(target) {  | 
深拷贝
JSON.stringfy
- 存在问题:
 
- 函数、undefined、symbol 会消失
 - Date 引用类型会变成字符串
 - 不可枚举属性无法拷贝
 - 无法拷贝对象的原型链
 - 拷贝 RegExp 引用类型会变成空对象
 - 有 NaN、Infinity 以及 -Infinity 会变成 null
 - 无法拷贝对象的循环应用,即对象成环 (obj[key] = obj) 错误信息:Uncaught TypeError: Converting circular structure to JSON
 
1  | function deepClone(target) {  | 
递归实现
1  | function clone(value) {  | 
考虑循环嵌套情况
1  | function deepClone(target, cache = new WeakMap()) {  | 
1  | const deepClone = function (obj, hash = new WeakMap()) {  |